package com.sxj.corejava.code07_面向对象;

import java.util.Scanner;

/**
 * @author 石小俊
 * @date 2025年01月06日
 */
public class Test03_全局变量与局部变量 {
    public static void main(String[] args) {
        Account account = new Account();
        account.name = "admin";
        account.money = 5000;
//        account.show();
//        account.test("张三");

//        Account account2 = new Account();
//        account2.name = "alex";
//        account2.money = 8000;
//        account2.test("李四");


        account.showMenu();
    }
}

class Account {
    // 全局变量:在类体中定义的变量
    // 全局变量在整个类的所有方法中都能使用
    String name;
    double money;

    public void test(String name) {
        // 局部变量:除了全局变量以外的所有变量都是局部变量
        // 局部变量一般是定义在方法的参数中或者方法体中
        // 局部变量只能在当前方法中使用
        double money = 10000;
        // 在方法中如果存在同名的局部变量与全局变量时
        // 默认情况下,访问的是局部变量
        System.out.println("局部变量:" + name);
        System.out.println("局部变量:" + money);
        // 如果想要访问全局变量,需要通过关键字this来实现,语法:this.全局变量名
        // this表示的是调用该方法的对象
        // 在此处无法知道this到底是谁,只有在该方法被调用时才能确定this表示的对象是谁
        System.out.println("全局变量:" + this.name);
        System.out.println("全局变量:" + this.money);
    }

    public void show() {
        // 在没有同名的全局变量与局部变量时,可以省略this关键字
        System.out.println("name:" + this.name + ",money:" + money);
    }

    /**
     * 查询余额,打印出户主姓名与账户余额
     */
    public void query() {
        System.out.println("户主姓名:" + name + ",账户余额:" + money);
    }

    /**
     * 存钱,打印存储了多少钱,存储后账户余额
     * @param money
     */
    public void saveMoney(double money) {
        this.money += money;
        System.out.println("提示:您存储了" + money + "元,当前账户余额为:" + this.money + "元");
    }

    /**
     * 转账,打印你给谁转账,转了多少钱,转账后账户余额是多少
     * 转账时需要保证账户余额足够
     * @param name
     * @param money
     */
    public void transfer(String name, double money) {
        if (money > this.money) {
            System.out.println("错误:对不起,您的账户余额不足,请先存款!");
        } else {
            // 转账
            this.money -= money;
            System.out.println("提示:您向" + name + "转账了" + money + "元,当前账户余额为:" + this.money);
        }
    }

    /**
     * 取钱,打印取出了多少钱,剩余的账户余额是多少
     * 需要保证账户余额足够
     * @param money
     */
    public void getMoney(double money) {
        if (money > this.money) {
            System.out.println("错误:对不起,您的账户余额不足,请先存款!");
        } else {
            this.money -= money;
            System.out.println("您取出了" + money + "元,当前账户余额为:" + this.money);
        }
    }

    public void showMenu() {
        Scanner sc = new Scanner(System.in);
        System.out.println("*********************欢迎使用紫金银行*********************");
        double money = 0.0;
        String name = null;
        while (true) {
            System.out.print("请选择服务(1.查询余额 2.存款 3.转账 4.取款 5.退出):");
            int choice = sc.nextInt();
            switch (choice) {
                case 1:
                    query();
                    break;
                case 2:
                    System.out.print("请输入存款金额:");
                    money = sc.nextDouble();
                    saveMoney(money);
                    break;
                case 3:
                    System.out.print("请输入向谁转账:");
                    name = sc.next();
                    System.out.print("请输入转账金额:");
                    money = sc.nextDouble();
                    transfer(name, money);
                    break;
                case 4:
                    System.out.print("请输入取款金额:");
                    money = sc.nextDouble();
                    getMoney(money);
                    break;
                case 5:
                    System.out.println("提示:您已经退出,欢迎下次光临");
                    return;
                default:
                    System.out.println("错误:对不起,您输入的选项有误,请重新输入!");
                    break;
            }
        }
    }
}
